package com.internetCafes.spms.web.sys.service;

import com.internetCafes.spms.web.sys.model.UserTokenInfo;
import com.internetCafes.spms.core.utils.R;

/**
 * 用户Token
 *
 * @author Sunny
 * @email rekeeper2011@hotmail.com
 * @date 2017-03-23 15:22:07
 */
public interface UserTokenInfoService {

	/**
	 * 根据用户id到redis缓存中查找UserTokenInfo实体类对象
	 * @param userId 用户id
	 * @return UserTokenInfo实体类对象
	 */
	UserTokenInfo queryByUserId(Long userId);

	/**
	 * 根据token值到redis缓存中查找UserTokenInfo实体类对象
	 * @param token 用户id
	 * @return UserTokenInfo实体类对象
	 */
	UserTokenInfo queryByToken(String token);

	/**
	 * 将UserTokenInfo实体类对象分为两个版本存储到redis缓存中
	 * 版本1、key为userId,值为UserTokenInfo实体类对象
	 * 版本2、key为token,值为UserTokenInfo实体类对象
	 * @param token UserTokenInfo实体类对象
	 */
	void save(UserTokenInfo token);

	/**
	 * 根据userId判断redis缓存中是否已经存在UserTokenInfo实体类对象
	 * 不存在则在缓存中创建一个UserTokenInfo实体类对象
	 * 如果存在则更新key为userId版对象，并删除key为token值的对象并根据新的token值创建UserTokenInfo实体类对象放入缓存中
	 * @param token UserTokenInfo实体类对象
	 */
	void update(UserTokenInfo token);

	/**
	 * 根据userId判断redis缓存中是否已经存在UserTokenInfo实体类对象并调用update()方法更新缓存
	 * 将token及有效时间放入返回通用响应对象R并进行结果返回
	 * @param userId 用户ID
	 */
	R createToken(long userId);

	/**
	 * 删除redis缓存中的两个版本的UserTokenInfo实体类对象
	 * @param userId 用户id
	 */
	void logout(Long userId);
}
